package vaccination;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.ResultSet;
import java.sql.Timestamp;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import utils.*;

public class Dottore_ProceduraRichiamoPazienti extends HttpServlet {
    private static Logger log = Logger.getLogger(Dottore_ProceduraRichiamoPazienti.class);
    @Override
    public void init() {
        PropertyConfigurator.configure(Dottore_ProceduraRichiamoPazienti.class.getClassLoader().getResource("utils/log4j.properties"));
    }
    
    /** 
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        
        HttpSession session = request.getSession();
        PrintWriter out = response.getWriter();
        
        String sec = request.getParameter("seconds");
        String message = "";
        int seconds = -1;
        int contatore = 0;
        
        // se è stato inserito un valore valido si prosegue con la procedura di richiamo
        // altrimenti si mostra il form di richiesta dei secondi con un eventuale messaggio d'errore
        if(sec != null){
            if(!Utils.tryParseUInt(sec)) {
                message = "Inserire un valore valido";
            }
            else {
                seconds = Integer.parseInt(sec);
            }
        }
        
        DBController dbController = DBController.getInstance();
        
        try
        {
        
            Utils.printHeader(request,out,"Richiami di vaccinazioni");
            
            // form base dei secondi
            if(seconds == -1) {
                
                out.println("            <div class=\"container-fluid-medium\">\n" +
                            "               <div class=\"row-fluid\">\n" +
                            "                    <div class=\"span6\">\n" +
                            "                        <div class=\"well\">\n" +
                            "                            <ul class=\"nav nav-list\">\n" +
                            "                              <li class=\"nav-header\">Vaccini</li>\n" +
                            "                              <li><a href=\"../dottore_proceduraRichiamoPazienti.html\">Procedura Richiamo Pazienti</a></li>\n" +
                            "                              <li class=\"active\"><a href=\"#\">- Lista</a></li>\n" +
                            "                              <li><a href=\"../dottore_visualizzaRichiamati.html\">Visualizza Pazienti Richiamati</a></li>\n" +
                            "                              <li class=\"nav-header\">Utente</li>\n" +
                            "                              <li><a href=\"Home\">Home</a></li>\n" +
                            "                              <li><a href=\"#\">Modifica Dati</a></li>\n" +
                            "                              <li><a href=\"Logout\">Logout</a></li>\n" +
                            "                            </ul>\n" +
                            "                        </div>\n" +
                            "                    </div>\n" +
                            "                    <div class=\"well span6\" style=\"padding:10px;\">\n" +
                            "                       <div>\n" +
                            "                           <form method=\"post\">\n"+                
                            "                               <div class=\"box\">\n");
                if(!message.isEmpty()) {
                out.println("                                   <p id=\"error-message\">" + message + "</p>\n"+
                            "                                   <label>Intervallo in secondi</label><input type=\"text\" name=\"seconds\" autofocus />\n"+
                            "                                   <br>\n" +
                            "                                   <input class=\"btn btn-primary\" type=\"submit\" value=\"Conferma\" />\n"+
                            "                               </div>\n"+
                            "                           </form>\n");
                }
                
                out.println("                       </div>\n" +
                            "                   </div>\n");
                

            } else {
                
                out.println("            <div class=\"container-fluid-large\">\n" +
                            "               <div class=\"row-fluid\">\n" +
                            "                    <div class=\"span4\">\n" +
                            "                        <div class=\"well\">\n" +
                            "                            <ul class=\"nav nav-list\">\n" +
                            "                              <li class=\"nav-header\">Vaccini</li>\n" +
                            "                              <li><a href=\"../dottore_proceduraRichiamoPazienti.html\">Procedura Richiamo Pazienti</a></li>\n" +
                            "                              <li class=\"active\"><a href=\"#\"> - Lista</a></li>\n" +
                            "                              <li><a href=\"../dottore_visualizzaRichiamati\">Visualizza Pazienti Richiamati</a></li>\n" +
                            "                              <li class=\"nav-header\">Utente</li>\n" +
                            "                              <li><a href=\"Home\">Home</a></li>\n" +
                            "                              <li><a href=\"#\">Modifica Dati</a></li>\n" +
                            "                              <li><a href=\"Logout\">Logout</a></li>\n" +
                            "                            </ul>\n" +
                            "                        </div>\n" +
                            "                    </div>\n" +
                            "                    <div class=\"well span8\" style=\"padding:10px;\">\n" +
                            "                       <div>\n");
                
                // selezione dei pazienti che non hanno richiami negli ultimi X secondi indicati
                DBResultSet dbResult = dbController.getPatientsBeforeTime(seconds);
                ResultSet patients = dbResult.getResultSet();
                
                // se non esistono pazienti visualizzo un messaggio d'errore altrimenti la tabella con i dati
                if(!patients.next()) {
                    out.println("                   <h2>Nessun richiamo </h2>\n");
                } else {
                    out.println("                   <form action=\"Dottore_ListaConfermaPazienti\" method=\"post\" >\n" +
                                "                       <table>\n" +
                                "                           <tr>\n" +
                                "                               <td>\n" +
                                "                                   <form action=\"Dottore_ProceduraRichiamoPazienti\" method=\"post\">\n" +
                                "                                       <input type=\"hidden\" name=\"seconds\" value=\""+sec+"\">\n" +
                                "                                       <input class=\"btn btn-mini\" type=\"submit\" name=\"cancel\" value=\"Cancella\"/>\n" +
                                "                                   </form>\n" +
                                "                               </td>\n" +
                                "                               <td>\n" +
                                "                                   <input type=\"hidden\" name=\"\" value=\"\">\n" +
                                "                                   <input class=\"btn btn-primary btn-mini\" type=\"submit\" name=\"conferm\" value=\"Conferma\"/>\n" +
                                "                               </td>\n" +
                                "                           </tr>\n" +
                                "                       </table\n>" +
                                "                       <table class=\"table\">\n" +
                                "                           <tr>\n" +
                                "                               <td width=\"200\"><h5>Paziente</h5></td>\n" +
                                "                               <td width=\"170\"><h5>Data di Nascita</h5></td>\n" +
                                "                               <td width=\"200\"><h5>Ultima vaccinazione</h5></td>\n"+ 
                                "                           </tr>\n");

                    boolean evenline=true;
                    do {
                        if(evenline) {
                            out.print("                     <tr style=\"background:#cccccc;\">\n");
                        } else {
                            out.println("                       <tr>\n");
                        }
                        
                        out.println("                               <td><a data-toggle=\"modal\" href=\"#infoPaziente"+ patients.getString("id") +"\">" + patients.getString("name") + " " + patients.getString("surname") + "</a></td>\n" + 
                                    "                               <td>" + Utils.formatDate(patients.getTimestamp("birthdate")) + "</td>\n");
                        
                        Timestamp data = patients.getTimestamp("date");
                        
                        // se il paziente non ha vaccinazioni precedenti visualizza un trattino
                        if (data == null) {
                            out.println("                           <td> - </td>\n");
                        }
                        else {
                            out.println("                           <td>" + Utils.formatDateTime(data) + "</td>\n");
                        }
                        
                        // stampa la checkbox per selezionare i pazienti da vaccinare
                        out.println("                               <td>\n" +
                                    "                                   <div id=\"infoPaziente"+ patients.getString("id") +"\" class=\"modal hide fade\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"myModalLabel\" aria-hidden=\"true\" style=\"display: none;\">\n" +
                                    "                                      <div align=\"center\">\n" +
                                    "                                          <div class=\"modal-header\">\n" +
                                    "                                              <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-hidden=\"true\">x</button>\n" +
                                    "                                              <br>\n" +
                                    "                                              <br>\n" +
                                    "                                              <h3 id=\"myModalLabel\">Scheda Paziente</h3>\n" +
                                    "                                          </div>\n" +
                                    "                                          <div class=\"modal-body\">\n" +
                                    "                                              <h4>" + patients.getString("name") + " " + patients.getString("surname") + "</h4>\n" +
                                    "                                              <p>"+ patients.getString("birthdate") +"</p>\n" +
                                    "                                              <img src=\"images/"+ patients.getString("photo") +"\">\n" +
                                    "                                          </div>\n" +
                                    "                                      </div>\n" +
                                    "                                  </div>\n" +
                                    "                                   <label class=\"checkbox\">" +
                                    "                                       <input type=\"checkbox\" name=\"" + patients.getString("id") + "\" />\n" +
                                    "                                   </label>" +
                                    "                               </td>\n");
                        out.println("                           </tr>\n");
                        evenline= !evenline;
                        contatore++;
                    } while(patients.next());
                
                    out.println("                       </table>\n" +                    
                                "                       <table>\n" +
                                "                            <tr>\n" +
                                "                                <td>\n" +
                                "                                    <form method=\"post\">\n" +
                                "                                        <br>\n" +
                                "                                        <input type=\"hidden\" name=\"seconds\" value=\""+sec+"\">\n" +
                                "                                        <input class=\"btn btn-mini\" type=\"submit\" name=\"cancel\" value=\"Cancella\"/>\n" +
                                "                                    </form>\n" +
                                "                                </td>\n" +
                                "                                <td>\n" +
                                "                                    <input type=\"hidden\" name=\"\" value=\"\">\n" +
                                "                                    <input class=\"btn btn-primary btn-mini\" type=\"submit\" name=\"conferm\" value=\"Conferma\"/>\n" +
                                "                                </td>\n" +
                                "                            </tr>\n" +
                                "                        </table>" +
                                "                   </form>\n"); 
                    
                    out.println("        <!-- Il javascript -->\n" +
                                "        <script src=\"../styles/jquery.js\"></script>\n" +
                                "        <script src=\"../styles/javascript.js\"></script>");
                }
                // rilascio la connessione
                dbController.releaseConnection(dbResult);
            }
            
            Utils.printFooter(out);
            
        } catch(Exception e) {
            //stampa tramite log4j il messaggio dell'eccezione e restituisce la pagine di errore
            log.error(e.getMessage());            
            Utils.printHeader(request, out, "Errore!");
            Utils.printError(request, out, e.getMessage());
            Utils.printFooter(out);
        } finally {           
            out.close();
        }
    }
    
    
    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** 
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}
